#ifndef NANE_ISUBSYSTEM_H
#   define  NANE_ISUBSYSTEM_H

#   include "nane/core/IBase.h"

namespace nane
{
    //
    // SubSystems' base interface
    // All subsystems e.g. RenderSystem, SoundSystem e.t.c. inherit ISubSystem
    //
    struct ISubSystem
        : public IBase
    {

        // initializes subsystem from uninitialized state
        // -
        // precond:
        //    subsystem must be in unitialized state
        // result:
        //    return is system initialized
        virtual bool Initialize() = 0;
        
        // shutdowns subsystem from initialized state
        // -
        // precond:
        //    subsytem must be in initialized state
        // result:
        //    subsystem goes to uninitialized state
        virtual void Shutdown() = 0;
    };

}   // namespace nane

#endif	// NANE_ISUBSYSTEM_H
